#include<stdio.h>
#include<stdlib.h>

/*
	编程实现将文件中的制表符换成恰当数目的空格,
	要求每次读写操作后都调用ferror()函数检查错误。。

	本实例中用到了ferror()函数，其语法格式如下:
		int ferror(FILE *stream)

		该函数的作用是检测给定流里的文件错误。
		返回值为0时，表示没有出现错误;而非零值时有错。
*/

void error(int e)
{
	if(e==0)
		printf("input error\n");
	else
		printf("output error\n");
		exit(1);
}

int main()
{
	FILE *in,*out;
	char infile[20],outfile[20],ch;
	int tab,i;
	//输入文件名
	printf("Enter the infile name:\n");
	scanf("%s",infile);
	//输出文件名
	printf("Enter the outfile name:\n");
	scanf("%s",outfile);
	if((in=fopen(infile,"w+"))==NULL)//读写打开不存在就创建
	{
		perror("fopen error!");
		exit(0);
	}
	if((out=fopen(outfile,"w"))==NULL)
	{
		perror("fopen error!");
		exit(0);
	}
	ch=fgetc(in);
	while(!feof(in)) // 返回假(0)，表示没有到达文件末尾
	{
		if(ferror(in))
			error(0);
		if(ch=='\t')
		{
			for(i=tab;i<8;i++)
			{
				putc('',out);
				if(ferror(out));
					error(1);
			}
			tab=0;
		}
		else
		{
			putc(ch,out);
			if(ferror(out))
				error(1);
				tab++;
			if(tab==8)
				tab=0;
				if(ch=='\n'||ch=='\r')
					tab=0;
		}
		ch=fgetc(in);
	}
	fclose(in);
	fclose(out);

	return 0;
}
